<?php


namespace app\queue\controller;


use think\Exception;
use think\facade\Queue;

class Test
{

    /*
     * 单任务测试方法
     *
     */
    public function test(){

        //当前任务将由哪个类来负责处理。
        //当轮到该任务时，系统将生成一个该类的实例，并默认调用其 fire 方法
        $jobHandlerClassName = 'app\queue\single\Order';

        //当前任务归属的队列名称，如果为新队列，会自动创建
        //php think queue:work --queue orderJobQueue
        //php think queue:work --queue orderJobQueue --daemon
        $jobQueueName = "orderQueue";

        //数组数据
        $orderData = [
            'id' => uniqid(),
            'time' => time(),
        ];

        //将该任务推送到消息队列，等待对应的消费者去执行
        //这里只是负责将数据添加到相应的队列名称的队列里，消费者与生产者并无联系
        $isPushed = Queue::push($jobHandlerClassName , $orderData, $jobQueueName);
        //这个延迟执行好像不得行   还需要再研究下
        //$isPushed = Queue::later(30,$jobHandlerClassName , $orderData, $jobQueueName);
        if( $isPushed !== false ){
            echo date('Y-m-d H:i:s') . " 队列添加成功";
        }else{
            echo '队列添加失败';
        }
    }

    /*
     * 多任务测试方法
     */
    public function test1(){
        $taskType = $_GET['taskType'];
        switch ($taskType) {
            // 域名地址/index/demo/index?taskType=taskA
            case 'taskA':
                $jobHandlerClassName  = 'app\queue\more\Order@taskA';
                $jobDataArr = ['a' => '1'];
                //php think queue:work --queue orderAJobQueue
                $jobQueueName = "orderAJobQueue";
                break;
            // 域名地址/index/demo/index?taskType=taskB
            case 'taskB':
                $jobHandlerClassName  = 'app\queue\more\Order@taskB';
                $jobDataArr = ['b' => '2'];
                //php think queue:work --queue orderBJobQueue
                $jobQueueName = "orderBJobQueue";
                break;
            default:
                break;
        }

        $isPushed = Queue::push($jobHandlerClassName, $jobDataArr, $jobQueueName);
        if ($isPushed !== false) {
            echo("$taskType 添加至 ".$jobQueueName ."<br>");
        }else{
            throw new Exception("push a new $taskType of MultiTask Job Failed!");
        }
    }

}